package com.wcj.array;

/**
 * 给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。
 *
 * 请注意 ，必须在不复制数组的情况下原地对数组进行操作。
 *
 * 输入: nums = [0,1,0,3,12]
 * 输出: [1,3,12,0,0]
 */
public class 移动零 {
    public static void main(String[] args) {
        moveZeroes(new int[]{0,1,0,3,12});
    }

    // TODO 效率低下
    public void moveZeroes2(int[] nums) {
        int slow = nums.length - 1;
        int fast = slow;
        while (fast >= 0){
            if (nums[fast] == 0){
                int tmp = nums[fast];
                nums[fast] = nums[slow];
                nums[slow] = tmp;
                slow--;
                int tmp2 = nums[fast];
                nums[fast] = nums[slow];
                nums[slow] = tmp2;
            }
            fast--;
        }
    }

    public static void moveZeroes(int[] nums) {
        int slow = 0;
        int fast = 0;
        while (fast < nums.length){
            if (nums[fast] != 0){
                nums[slow] = nums[fast];
                slow++;
            }
            fast++;
        }
        while (slow < nums.length){
            nums[slow] = 0;
            slow++;
        }
    }
}
